package com.wgz.medicalmanagement.domain.dto;

import com.wgz.medicalmanagement.domain.entity.UserRole;

import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 用户注册请求DTO
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RegisterRequest {
    
    /**
     * 用户名，长度3-20个字符
     */
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度必须在3-20个字符之间")
    private String username;
    
    /**
     * 密码，长度6-20个字符
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 20, message = "密码长度必须在6-20个字符之间")
    private String password;
    
    /**
     * 确认密码，必须与密码一致
     */
    @NotBlank(message = "确认密码不能为空")
    private String confirmPassword;
    
    /**
     * 真实姓名，选填
     */
    private String realName;
    
    /**
     * 电子邮箱，选填，但需要符合邮箱格式
     */
    @Email(message = "电子邮箱格式不正确")
    private String email;
    
    /**
     * 手机号码，选填，但如果提供则需要符合手机号格式
     */
    @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "手机号码格式不正确")
    private String mobile;
    
    /**
     * 手机号码，选填，但如果提供则需要符合手机号格式
     * 与mobile字段同义，兼容不同的命名风格
     */
    @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "手机号码格式不正确")
    private String phoneNumber;
    
    /**
     * 用户角色
     */
    @Builder.Default
    private UserRole role = UserRole.PATIENT; // 默认为患者角色
} 